import argparse

from fastapi import FastAPI, APIRouter
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager


from config.application import Profile, profiles
from database.dbmanager import PgManager
from entity.R import R
from routers import overall_process_router

parser = argparse.ArgumentParser(
    description="FastAPI application with port argument")
parser.add_argument("--profile",
                    type=str,
                    default='',
                    help="for the FastAPI application")
args = parser.parse_args()
profile: Profile = profiles[args.profile]
profiles["current"] = profile
port: int = profile.port
host: str = profile.host
application_name: str = profile.application_name

@asynccontextmanager
async def lifespan(app: FastAPI):
    pg_manager = PgManager(profiles["current"].postgres_config)
    pg_manager.initial_table()
    pg_manager.close()
    yield


app = FastAPI(lifespan=lifespan)

app.add_middleware(
    CORSMiddleware,
    # 允许跨域的源列表，例如 ["http://www.example.org"] 等等，["*"] 表示允许任何源
    allow_origins=["*"],
    # 跨域请求是否支持 cookie，默认是 False，如果为 True，allow_origins 必须为具体的源，不可以是 ["*"]
    allow_credentials=False,
    # 允许跨域请求的 HTTP 方法列表，默认是 ["GET"]
    allow_methods=["*"],
    # 允许跨域请求的 HTTP 请求头列表，默认是 []，可以使用 ["*"] 表示允许所有的请求头
    # 当然 Accept、Accept-Language、Content-Language 以及 Content-Type 总之被允许的
    allow_headers=["*"],
    # 可以被浏览器访问的响应头, 默认是 []，一般很少指定
    # expose_headers=["*"]
    # 设定浏览器缓存 CORS 响应的最长时间，单位是秒。默认为 600，一般也很少指定
    # max_age=1000
)





router = APIRouter()


@router.get("/", tags=["首页"])
def index():
    return R.success({"信息": "Hello, World!"}, "success")


router.include_router(overall_process_router, prefix='/overall-process')
app.include_router(router, prefix='/py-influence-scope-statistic')

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host=host, port=port)
